<?php defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Usuarios class
 * @author Thiago Braga <thiago@sitesg.com.br>
 * @copyright 2013 SG Comunicação e Design
 * @license http://www.php.net/license/3_01.txt PHP License 3.01
 * @access public
 */
class Usuarios extends Model_Controller {

  /**
   * Carrega a aba de Consulta de Usuários
   * @return void
   */
  public function index() {
    if (!preg_match('/Administradores|Desenvolvedores/', $this->session->userdata('grupo'))) {
      redirect(base_url('usuarios/cadastro/'.$this->session->userdata('id')));
    } else {
      $this->data->page = 'Usuários';
      $this->data->pageinfo = 'Os administradores podem consultar nesta página os usuários cadastrados no sistema, bem como editar dados e permissões.';
      $this->data->newpage = 'usuarios/cadastro';
      $this->data->tab = 'usuarios/consulta';
      $this->data->content = 'restrito';
      $this->data->css = array('mods/restrito');
      $this->data->js = array('mods/usuarios/consulta');
      $this->data->usuarios = $this->Usuarios->select_usuarios();
      $this->load->view('base', $this->data);
    }
  }

  /**
   * Carrega a aba de Cadastro de Usuários
   * @return void
   */
  public function cadastro($id = false) {
  	$this->load->model('grupos_model', 'Grupos');
    $this->data->page = 'Cadastro de Usuários';
    $this->data->content = 'restrito';
    $this->data->tab = 'usuarios/cadastro';
    $this->data->css = array('mods/restrito');
    $this->data->js = array('mods/usuarios/cadastro');
    $this->data->grupos = $this->Grupos->select_grupos();
    if ($id) {
      $this->data->tab = 'usuarios/visualizacao';
      $this->data->info = $this->data->info_edit;
      $this->data->usuario = $this->Usuarios->select_usuarios($id);
      $this->data->usuario->info = str_replace('</li>', '', $this->data->usuario->info);
      $this->data->usuario->info = array_filter(explode('<li>', $this->data->usuario->info));
      $this->data->usuario->producoes = str_replace('</li>', '', $this->data->usuario->producoes);
      $this->data->usuario->producoes = array_filter(explode('<li>', $this->data->usuario->producoes));
      $this->data->usuario->grupo = explode(',', $this->data->usuario->grupo);
    } else {
      $this->data->tab = 'usuarios/cadastro';
      $this->data->info = $this->data->info_cadastro;
    }
    $this->load->view('base', $this->data);
  }

  /**
   * Checa se o CPF informado já está cadastrado
   * @return void
   */
  public function ajax_cpf() {
    if ($this->Usuarios->check_cpf($this->input->post('cpf'))) {
      $this->response->success = false;
      $this->response->type = 'warning';
      $this->response->header = 'CPF existente';
      $this->response->message = 'Já existe um usuário com o CPF informado.';
    }
    echo json_encode($this->response);
  }


  /**
   * Altera a senha do usuário
   * @return void
   */
  public function ajax_password() {
    if ($this->Usuarios->update_password($this->uri->segment(3), $this->input->post('password'))) {
      $this->response->type = 'success';
      $this->response->header = 'Senha alterada';
      $this->response->message = 'Sua senha foi alterada com sucesso.';
    }
    echo json_encode($this->response);
  }


  /**
   * Checa a permissão do usuário
   * @return void
   */
  public function ajax_permission() {
    if ($this->Usuarios->check_permission($this->input->post('url'))) {
      $this->response->user = $user;
    }
    echo json_encode($this->response);
  }


  /**
   * Salva o cadastro do usuário via ajax
   * @return json
   */
  public function ajax_save() {
    try {
      $required = array('nome', 'email', 'cpf', 'senha');
      foreach ($required as $field)
        if (empty($_POST[$field]))
          throw new Exception('O campo <b>'.$field.'</b> é obrigatório.');

      if ($this->Usuarios->save($this->input->post())) {
        $this->response->success = true;
        $this->response->type = 'alert';
        $this->response->header = 'Usuário salvo com sucesso';
        $this->response->message = 'O usuário foi salvo com sucesso.';
      } else {
        $this->response->type = 'warning';
        $this->response->header = 'Erro ao salvar';
        $this->response->message = 'Ocorreu um erro ao salvar os dados do usuário. Caso persista o erro, <a href="' . base_url('contato') . '">informe-nos na página de contato</a>.';
      }
    } catch (Exception $e) {
      $this->response->type = 'warning';
      $this->response->header = 'Campos inválidos';
      $this->response->message = $e->getMessage();
      $this->response->field = $field;
    }
    echo json_encode($this->response);
  }

  /**
   * Exclui o cadastro do usuário via Ajax
   * @return void
   */
  public function ajax_delete() {
    if ($this->Usuarios->delete($this->data)) {
      $this->response->type = 'success';
      $this->response->header = 'Usuário excluído com sucesso';
      $this->response->message = 'O usuário selecionado foi excluído com sucesso.';
    } else {
      $this->response->type = 'warning';
      $this->response->header = 'Erro ao excluir';
      $this->response->message = 'Erro ao excluir o usuário. Caso persista o erro, <a href="'.base_url('contato').'">informe-nos na página de contato</a>.';
    }
    echo json_encode($this->response);
  }

  /**
   * Efetua o login do usuário
   */
  public function ajax_login() {
    try {
      $required = array('login', 'password');
      foreach ($required as $field)
        if (empty($_POST[$field]))
          throw new Exception('O campo <b>'.$field.'</b> é obrigatório.');

      $usuario = $this->Usuarios->login($this->input->post('login'), $this->input->post('password'));
      if ($usuario) {
        $session_data = array(
          'id' => md5('MB'.$usuario->id.'SG'),
          'nome' => $usuario->nome,
          'grupo' => $usuario->grupo
        );
        $this->session->set_userdata($session_data);
        $this->response->success = true;
        $this->response->type = 'alert';
        $this->response->header = 'Login realizado';
        $this->response->message = 'Login realizado com sucesso. Redirecionando...';
      } else {
        $this->response->success = false;
        $this->response->type = 'warning';
        $this->response->header = 'Usuário ou senha inválidos';
        $this->response->message = 'O nome de usuário e senha digitados não coincidem.';
      }
    } catch (Exception $e) {
      $this->response->success = false;
      $this->response->type = 'warning';
      $this->response->header = 'Campos inválidos';
      $this->response->message = $e->getMessage();
    }
    echo json_encode($this->response);
  }

  /**
   * Efetua o logout do usuário
   */
  public function ajax_logout() {
    $this->session->sess_destroy();
  }


  /**
   * Envia um e-mail via ajax
   *
   * Valida os campos do formulário e, caso estejam
   * corretos, envia um e-mail com os parâmetros
   * recebidos via ajax .
   *
   * @uses E-mail library
   * @throws Exception
   */
  public function ajax_recovery() {
    try {
      if (empty($_POST['email']))
        throw new Exception('O campo <b>'.$field.'</b> é obrigatório.');

      $this->data->email = $this->input->post('email');
      $this->data->assunto = 'Recuperação de senha.';

      $this->load->library('email');
      $this->email->from('no-reply@mbconsultoriajuridica.com.br', 'MB Consultoria Jurídica');
      $this->email->to($this->data->email);
      $this->email->subject($this->data->assunto);
      $this->email->message($this->load->view('usuarios/email', $this->data, true));

      if ($this->email->send()) {
        $this->response->success = true;
        $this->response->type = 'success';
        $this->response->header = 'Recuperação de senha';
        $this->response->message = "A recuperação de senha foi enviada. Verifique seu e-mail.";
      } else {
        $this->response->success = false;
        $this->response->type = 'alert';
        $this->response->header = 'Erro no envio do e-mail';
        $this->response->message = $this->email->print_debugger();
      }
    } catch (Exception $e) {
      $this->response->type = 'alert';
      $this->response->header = 'Campos inválidos';
      $this->response->message = $e->getMessage();
      $this->response->field = $field;
    }
    echo json_encode($this->response);
  }

  /**
   * Recupera a senha do usuário enviado por parâmetro.
   * @param {String} $email Hash contendo o e-mail do usuário.
   * @param {String} $valid Hash da data do pedido para verificar a validade.
   */
  public function password_recovery($email) {
    echo "<pre>$email</pre>";
    echo "<pre>$valid</pre>";
    echo "<pre>".date('Y-m-d H:m:s')."</pre>";
    echo "<pre>".md5('MB'.date('Y-m-d H:m:s').'SG')."</pre>";
  }

}

/* End of file usuarios.php */
/* Location: ./application/controllers/usuarios.php */